import axios from 'axios'
import { ElLoading,ElMessage } from 'element-plus'
import { getToken } from './index'
import { useRouter } from 'vue-router'

const router = useRouter()
// 引入axios，定义默认配置，添加拦截器
axios.defaults.baseURL = import.meta.env.VITE_BASE_URL
axios.defaults.timeout = 6000
// 添加全屏login
let loading:any = null

// 添加拦截器
axios.interceptors.request.use(function (config) {

  // 请求拦截器
    // 添加全屏login
    loading = ElLoading.service({
      lock: true,
      text: 'Loading',
      background: 'rgba(0, 0, 0, 0.7)',
    })
    // 把token添加在请求头中发给后端校验
    if(getToken()){
      config.headers.token=getToken()
    }

  return config;
}, function (error) {

  return Promise.reject(error);
});


axios.interceptors.response.use(function (res) {
  // 响应拦截器
  loading.close()
  // 后端校验token返回code码
  switch (res.data.code) {
    case 401:
      // 登录过期
      // 清除缓存  提示登录过期  去登录页
      localStorage.removeItem('token')
      localStorage.removeItem('role')
      localStorage.removeItem('userInfo')
      ElMessage({
        type:'error',
        message:'登录过期请重新登录',
        duration:1000,
        onClose:()=>{
          router.push('/login')
        }
      })
      break;
  case 403:
    // 未登录
    // 提醒为登录  去登录页
    ElMessage({
      type:'error',
      message:'请登录后访问',
      duration:1000,
      onClose:()=>{
        router.push('/login')
      }
    })
    break;
    default:
      break;
  }
  return res;

}, function (error) {
  loading.close()
  return Promise.reject(error);
});


// 导出文件
export default axios